package com.wzgl.core.controller;





import java.math.BigInteger;
import java.sql.SQLException;
import java.util.Date;

import com.jfinal.aop.Before;
import com.jfinal.kit.HashKit;
import com.jfinal.log.Log;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.IAtom;
import com.jfinal.plugin.activerecord.Page;
import com.wzgl.core.Consts;
import com.wzgl.core.base.JBaseCRUDController;
import com.wzgl.core.interceptor.RequiredUserIdInterceptor;
import com.wzgl.core.model.Tdicinfo;
import com.wzgl.core.model.Tusers;
import com.wzgl.core.model.query.UserQuery;
import com.wzgl.core.utils.EncryptUtils;
import com.wzgl.core.utils.StringUtils;
import com.wzgl.core.utils.UuidUtil;
import com.wzgl.core.utils.WebUtils;
import com.wzgl.core.validate.RegisterValidate;

public class UserController extends JBaseCRUDController<Tusers> {
	private Log log=Log.getLog(UserController.class);
	
	/**
	 * 用户注销
	 */
	@Before(RequiredUserIdInterceptor.class)
	public void outLogin(){
		WebUtils.logoutUser(this);
		if (this.isAjaxRequest()) {
			renderAjaxResultForSuccess();
		} else {
			//如果是网页请求 则去要去的地方 
			redirect(Consts.ROUTER_USER_LOGIN);
		}
	}
	/**
	 * 用户登录
	 */
	@Before(RegisterValidate.class)
	public void loginUser(){
		String faccount = getPara("faccount");
		String fpword = getPara("fpword");
		String rember = getPara("rember");
		boolean is_rember = false;
		//记住用户 下次自动登录
		if(StringUtils.isNotBlank(rember) && rember.equals("1")){
			is_rember = true;
		}
		
		/**
		 * 验证用户是否存在
		 */
		Tusers user = UserQuery.me().findUserByEmail(faccount);
		if (null == user) {
			if (isAjaxRequest()) {
				renderAjaxResultForError("没有该用户");
			} else {
				setAttr("errorMsg", "没有该用户");
				render("index.jsp");
			}
			return;
		}
		/**
		 * 根据用户核对登录信息是否准确
		 */
		if (EncryptUtils.verlifyUser(user.getFpassword(), fpword)) {
			WebUtils.loginUser(this, user, is_rember);
			if (this.isAjaxRequest()) {
				renderAjaxResultForSuccess("登录成功",EncryptUtils.generateUcode(user.getFid()));
			} else {
				//如果是网页请求 则去要去的地方 
//				String gotoUrl = getPara("goto");
//				if (StringUtils.isNotEmpty(gotoUrl)) {
//					gotoUrl = StringUtils.urlDecode(gotoUrl);
//					gotoUrl = StringUtils.urlRedirect(gotoUrl);
//					redirect(gotoUrl);
//				} else {
//					redirect(Consts.ROUTER_USER_CENTER);
//				}
				redirect(Consts.ROUTER_USER_CENTER);
			}
		} else {
			if (isAjaxRequest()) {
				renderAjaxResultForError("密码错误");
			} else {
				setAttr("errorMsg", "密码错误");
				render("user_login.jsp");
			}
		}
	}
	/**
	 * 注册新的用户
	 */
	@Before(RegisterValidate.class)
	public void registerUser(){
		final Tusers user = getModel(Tusers.class);
		String faccount = getPara("faccount");
		String fpword = getPara("fpword");
		
		Tusers tusers = Tusers.dao.findByEmail(faccount);
		if (tusers != null) {
			renderAjaxResultForError("该邮箱已经存在,请直接登录.");
			return;
		}
		
		user.setFid(UuidUtil.get32UUID());
		user.setFaccount(faccount);
		user.setFpassword(HashKit.md5(fpword));
		user.setFctime(new Date());
		boolean saved = Db.tx(new IAtom() {
			@Override
			public boolean run() throws SQLException {

				if (!user.save()) {
					return false;
				}
				user.putCache(user.CACHE_NAME,user);
				return true;
			}
		});
		
		if (saved) {
			WebUtils.loginUser(this, user, false);
			/***
			 * 注册完成后去个人中心 完善资料
			 */
			renderAjaxResultForSuccess("注册成功",EncryptUtils.generateUcode(user.getFid()));
		} else {
			renderAjaxResultForError();
		}
		renderAjaxResultForSuccess("ok");
	}
	/**
	 * 用户管理 列表
	 */
	@Before(RequiredUserIdInterceptor.class)
	public void user_index(){
		render("user_list.jsp");
	}
	/**
	 * 用户管理 用户编辑(新增 修改)
	 */
	@Before(RequiredUserIdInterceptor.class)
	public void user_edit(){
		render("user_edit.jsp");
	}
	/**
	 * 用户管理 列表数据
	 */
	@Before(RequiredUserIdInterceptor.class)
	public void user_list(){
		Page<Tusers> list_page;
		try {
			BigInteger page=getParaToBigInteger("page",BigInteger.valueOf(1));
			BigInteger pagesize=getParaToBigInteger("pagesize",BigInteger.valueOf(5));
			String fvalue =  getParaTo("fvalue");
			list_page= Tusers.dao.paginate(page.intValue(),pagesize.intValue(),fvalue);
			renderAjaxResult("",0,list_page);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			renderAjaxResultForError(e.getMessage());
		}
	}
	
	public void deleteUser(){
		
	}
}
